Skip to content

docs(adr): ADR-0130 status is Accepted, in ADR-0125's spelling, dated by its landing merge - #15704

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-15453-adr-status-accepted-by-merge
Sep 5, 2026
Merged

docs(adr): ADR-0130 status is Accepted, in ADR-0125's spelling, dated by its landing merge#15704
os-zhuang merged 1 commit into
mainfrom
claude/issue-15453-adr-status-accepted-by-merge

Conversation

@claude

@claude claude Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Part of #15453

Ruling A (maintainer, 2026-09-05, decision batch #40, verbatim 「同意」, recorded on the card by the director seat) executed on one record: docs/adr/0130-release-artifact-as-co-ownership-boundary.md. The other two records the ruling names are not in this PR — see Records not touched here.

The one field that changes

Before — the **Status**: field, soft-wrapped across source lines 3-5:

**Status**: Proposed (2026-09-01) — awaiting the maintainer's hand-merge, which is itself the
acceptance act for a governed surface (Prime Directive #14). ⛔ Nothing below is settled until
this record merges; the implementation cards are cut **from** the merged ADR, never ahead of it.

After — one line, in ADR-0125's spelling (its own line 3 was read as the template, not recalled):

**Status**: Accepted (2026-09-01) — accepted by the merge that landed it on `main` ([#14151](https://github.com/objectstack-ai/objectstack/pull/14151), commit `682d03ba7`), which is itself the acceptance act for a governed surface (Prime Directive #14).

1 insertion, 3 deletions in one file. The ruling names "line 3, its Status line"; in this record that field is soft-wrapped over source lines 3-5, so the whole field is replaced and nothing else. The trailing narrative goes with it because the ruling's rule is that the status line carries the state and the act and nothing else — and "Nothing below is settled until this record merges" is both narrative and false once the record is Accepted. Every other line of the file, including the 2026-09-02 addendum block that follows, is byte-identical.

The landing reading — the ORIGINAL landing, not the anchor migration

The ruling quoted 09cc6be43 for this record. That commit is the 2026-09-03 anchor migration; the card itself says the original landing is earlier and was not chased. It was chased here, in two independent channels that agree.

git — the clone is shallow, so it was deepened first. That mattered: on the shallow tree git log --follow answered with an unrelated 2026-09-04 commit. After git fetch --deepen:

$ git log --follow --diff-filter=A --format='%h %cd %s' --date=iso-strict -- docs/adr/0130-release-artifact-as-co-ownership-boundary.md
682d03ba7 2026-09-01T09:03:27+00:00 docs(adr): ADR-0130 — the release artifact is the co-ownership boundary (one artifact, N packages) (#14151)

RESTGET /repos/objectstack-ai/objectstack/commits?path=docs/adr/0130-release-artifact-as-co-ownership-boundary.md returns 3 commits for the path (09cc6be43 2026-09-03, 184f6b0ca 2026-09-03, 682d03ba7 2026-09-01); the oldest is 682d03ba7, and GET /commits/682d03ba7 reports files[0].status: "added" for exactly this path, with the message naming PR #14151 (the repo squash-merges).

Precondition set by the ruling — the landing PR's merged_by must be a human approver account. GET /repos/objectstack-ai/objectstack/pulls/14151, response fields quoted:

{
  "number": 14151,
  "merged": true,
  "merged_at": "2026-09-01T09:21:39Z",
  "merge_commit_sha": "682d03ba7e8325f8facd59bd71ece9fcb7ad6d3b",
  "base": { "ref": "main" },
  "user": { "login": "os-sam" },
  "merged_by": { "login": "os-zhuang", "type": "User", "id": 277994282 }
}

merged_by.login is os-zhuang — one of the human approver accounts the ruling names, not a seat account and not an app. So "the merge was the acceptance act" holds for this record, and the date is its landing day, 2026-09-01 (the commit date and merged_at fall on the same day).

Records not touched here

  • ADR-0128 — its landing PR was merged by a seat account, not a human approver, which is exactly the case the ruling says it does not cover ("stop and report that record"). Reported on the card; ⛔ not edited.
  • ADR-0131 — the precondition holds for it, but the file is in flight on another lane's draft PR, so it is a hard same-file serial and is a second flight after that PR lands or is closed.
  • ADR-0126 — its **Original status**: history line is a grep near-miss, ⛔ deliberately untouched.
  • No changeset (nothing publishes from this diff, skip-changeset); content/docs/releases/** untouched.

Derived surfaces — none needs regeneration

Searched for anything that pins this record's Status or the word Proposed for it: docs/adr/README* and docs/adr/index* do not exist (the only non-numbered file under docs/adr/ is PRIORITIZATION.md); no hit for 0130 under content/docs/** outside content/docs/releases/**; scripts/check-adr-*.mjs carry no status ledger. The only repo-wide reference to the file by path is examples/app-multi-package/README.md:3, a plain relative link with no line anchor, and check-adr-symbol-anchors reports 0 line anchors survive corpus-wide, so the 2-line shortening moves no anchor.

Gates

Family derived from the real change set, not from a hand-written list: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack at commit 4e3ea9826 (1 path vs merge base 95d5cbb31) ⇒ 17 commands, all run, then reconciled with --ran:

✓ dispatch-gates --ran: 17 derived famil(ies) accounted for — 17 run, 0 NOT-MEASURED.
gate exit verdict line
check-adr-links --self-test 0 ✅ check-adr-links --self-test: discrimination, census, ADR-0046 pin and baseline staleness all verified
check-adr-links 0 ✅ check-adr-links: 650 relative link destination(s) under docs/adr/ resolve
check-adr-symbol-anchors --self-test 0 ✅ ... every finding class provoked, healthy anchors silent, population live, wiring pinned (1919 live anchors)
check-adr-symbol-anchors 0 ✅ check-adr-symbol-anchors: 1919 anchors across 135 records resolve ... 0 line anchors survive.
pnpm check:adr-anchors 0 check-adr-anchors: OK (53 anchored file(s), every governing ADR still referenced; 129 decision number(s) ...; 32821 citation(s) across 4037 file(s) resolve ...)
pnpm check:doc-authoring 0 ✓ doc authoring guard: 14808 customer-facing string(s) across 756 spec sources clean
pnpm --filter @objectstack/lint run check:doc-formula-expressions 0 ✓ check:doc-formula-expressions (spec TSDoc, #6763): 9 @example(s) judged clean across 1178 packages/spec/src files
pnpm check:nul-bytes 0 check-nul-bytes: OK (scanned 7588 text file(s) ... no raw ASCII control bytes).
pnpm check:cross-package-test-inputs 0 OK: 27 package(s) read outside themselves, all declared, and turbo.json hashes every declared glob.
check-ci-filter-parity 0 OK: all 148 declared cross-package glob(s) (102 unique) are covered by core or crosspkg ...
check-closing-keyword-parity (+ --self-test) 0 check-closing-keyword-parity: OK (3 parsers agree on all 9 keywords and both measured separators ...)
check-comment-mask-corpus 0 ✓ comment-mask corpus sweep: 5973 files, 0 disagree, 0 unparseable
pnpm check:driver-memory-census 0 check-driver-memory-census: OK — every declaration is ledgered, every ledger entry is live
pnpm check:refd-timer-probe 0 ✓ check-refd-timer-probe self-test: 11 cases pass, negative controls included.
pnpm check:watch-hint-literal 0 ✓ check-watch-hint-literal: 58 declaration(s) across 4 rostered name(s) ...
pnpm check:pm-governed-merges 0 ✓ check-governed-merges --self-test: 274 assertions ... live: the real generator declared 9 output(s) and certified this tree
check-governed-merges --test docs/adr/0130-...md 3 ⛔ GOVERNED — a human merge is the review record for this PR (#9495 regime). — the expected predicate answer, not a failure

Two readings that are NOT MEASURED rather than green, stated so they are not misread:

  • The four gates above that first answered exit 3 PREREQUISITE NOT MET (no node_modules, then @objectstack/formula / @objectstack/lint not built) were re-run after pnpm install and the two package builds; the table reports the re-runs.
  • pnpm lint does not apply to this diff, and this is a measurement, not a skip: eslint --no-inline-config on the edited file, --format json, returns 1 result with errorCount: 0 and the single warning "File ignored because no matching configuration was supplied.", and eslint.config.mjs contains zero .md/markdown entries. The diff touches exactly one file, and it is one eslint is not configured to read, so no untouched file's verdict can move.

Governed-surface handling

docs/adr/** ⇒ draft PR, os-zhuang + hotlong requested, human merge. ⛔ Not flipped ready by the seat, ⛔ not enqueued, ⛔ no auto-merge, ⛔ no self-approval. Part of #15453 rather than a closing keyword, because two records on that card are still outstanding.

🤖 Generated with Claude Code

https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox


Generated by Claude Code

… by its landing merge

The record's Status line said "Proposed — awaiting the maintainer's hand-merge,
which is itself the acceptance act". A reader can only reach that line because
the file is on `main`, i.e. because the hand-merge already happened, so the
sentence disproves itself and names an event that can never occur again. It is
also read as a gate: one seat has "re-read the Status line, never assume" in its
standing check-in, which makes it a pause with no end condition.

The line now carries the state and the act only, in the spelling ADR-0125
already uses: the landing merge, its PR, its commit and its date.

Landing reading (the ORIGINAL landing, not the 2026-09-03 anchor migration):
`git log --follow --diff-filter=A` and the REST commit list agree on
`682d03ba7` (2026-09-01, `added` this path), whose message names PR #14151;
`GET /pulls/14151` reports `merged: true`, `base.ref: main`,
`merge_commit_sha: 682d03b...`, `merged_by.login: os-zhuang` — a human
approver, which is the precondition the ruling sets for treating the merge as
the acceptance act.

Part of #15453

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
@claude claude Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 5, 2026
@claude
claude Bot requested review from hotlong and os-zhuang September 5, 2026 03:36
@github-actions github-actions Bot added size/xs documentation Improvements or additions to documentation labels Sep 5, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review September 5, 2026 03:36
@os-zhuang
os-zhuang enabled auto-merge September 5, 2026 03:37
@os-zhuang
os-zhuang added this pull request to the merge queue Sep 5, 2026

os-steve commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator

ACCEPT — governed in-seat review of PR #15704, head 4e3ea9826 (skills seat, 2026-09-05T03:5xZ), executing ruling A of #15453 (batch #40) on the one record it covers today.

Implemented-by: claude/issue-15453-adr-status-accepted-by-merge (os-dev subagent)
Reviewed-by: session_019RfFHiRCSs3JXLK4cwcfox (skills seat)

Verified in a detached compare worktree at the PR head against merge-base 95d5cbb31, not from the report: one file, docs/adr/0130-release-artifact-as-co-ownership-boundary.md, +1 / −3 — the soft-wrapped **Status**: field (source lines 3–5) becomes one line in ADR-0125's exact spelling: Accepted (2026-09-01) — accepted by the merge that landed it on main([#14151](…), commit682d03b), which is itself the acceptance act for a governed surface (Prime Directive #14). The precondition the ruling sets was re-read by the seat: the record's ORIGINAL landing is commit 682d03ba7 (2026-09-01, the file added), squash of PR #14151, whose merged_by is os-zhuang (type User) — a human approver, so "merge = acceptance" holds for this record; the anchor-migration commit the ruling record quoted (09cc6be43, 09-03) was not the landing and was correctly not used. The trailing sentence of the old field ("Nothing below is settled until this record merges…") went with it: false once the record is Accepted, and the ruling scopes the field to the state and the act. ADR-0126's **Original status**: history line, the 2026-09-02 addendum block and content/docs/releases/** are untouched. Gates from the dev's run: check-adr-links 650 destinations resolve, check-adr-symbol-anchors 1919 anchors across 135 records, check-adr-anchors OK, check:doc-authoring clean, 17 derived commands all exit 0; check-governed-merges --test exit 3 (GOVERNED, docs/adr/**). CI on 4e3ea9826: 35 check runs, 24 success, 11 skipped, none failing.

Coverage of the card after this PR (Part of #15453): ADR-0130 done here; ADR-0131 serial behind the devx lane's draft PR #15612 on that file; ADR-0128 excluded by the ruling's own precondition (landing PR #12839 merged by the seat account os-sales) and in the decision box for the maintainer.

Landing regime: governed (docs/adr/**); an approver has already taken the human step. Closes nothing; #15453 stays open for the two records above.


Generated by Claude Code

Merged via the queue into main with commit e6c9964 Sep 5, 2026
36 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-15453-adr-status-accepted-by-merge branch September 5, 2026 05:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants